home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 July: Mac OS SDK / Dev.CD Jul 96 SDK / Dev.CD Jul 96 SDK1.toast / Development Kits (Disc 1) / OpenDoc / OpenDoc Development / Build Support / BuildOpenDocPart < prev    next >
Encoding:
Text File  |  1996-02-19  |  8.3 KB  |  305 lines  |  [TEXT/MPS ]

  1. #
  2. #    File:        BuildOpenDocPart
  3. #
  4. #    Contains:    Build script for OpenDoc® Sample Code parts.
  5. #
  6. #    Written by:    Steve Smith
  7. #
  8. #    Copyright:    © 1995 by Apple Computer, Inc., all rights reserved.
  9. #
  10.  
  11. if "{OpenDocBuildSupportDir}" == ""
  12.     Echo
  13.     Echo "### Error: The “UserStartup•OpenDoc” script has not been executed."
  14.     Echo "###     Please verify that the script is installed properly and restart"
  15.     Echo "###    the MPW shell application."
  16.     exit 1
  17. end
  18.  
  19. if {#} == 0
  20.     Echo
  21.     Echo "Usage: BuildOpenDocPart -f <makefile> -b <compiler(s)> [options]*"
  22.     Echo 
  23.     Echo "    <compiler(s)> = compiler<1>,…compiler<n>"
  24.     Echo
  25.     Echo "        'Idl' to generate .[x]h, .[x]ih, and .c[pp] files"
  26.     Echo "        'PubIdl' to generate public .[x]h files"
  27.     Echo "        'Rez' to generate MPW and MW project .rsrc files"
  28.     Echo "        'SCpp' to build part with SCpp"
  29.     Echo "        'SC' to build part with SC"
  30.     Echo "        'MrCpp' to build part with MrCpp"
  31.     Echo "        'MrC' to build part with MrC"
  32.     Echo "        'SMrCpp' to build part with SMrCpp"
  33.     Echo "        'SMrC' to build part with SMrC"
  34.     Echo
  35.     Echo "Options:"
  36.     Echo "    -fat        # merge the 68k and PPC shared libraries"
  37.     Echo "    -k            # rebuild all source files"
  38.     Echo "    -cvi        # display CFM version information"
  39.     Echo "    -noPCH        # don't compile code using precompiled headers"
  40.     Echo "    -noDBG        # compile with sym/macsbug options off"
  41.     Echo "    -toco <opt>    # temporarily override compiler option"
  42.     Echo '                    (ie. -toco "-d OptimizationOption=speed")'
  43.     Echo 
  44.     exit 1
  45. end
  46.  
  47. set debug 0 #DEGUG
  48. set saveSensitive "{CaseSensitive}"
  49. set CaseSensitive 0
  50. alias turnCaseSensitiveOn "set CaseSensitive ∂"∂{saveSensitive∂}∂""
  51.  
  52. set buildType ""
  53. set fullBuild ""
  54. set nopch ""
  55. set TempCompilerOverride ""
  56. set fatFlag ""
  57. set PrivateHeaders "-d PrivateHeadersFlag=∂"-p∂""
  58. set infoFlag ""
  59. set nonDebugFlags ""
  60.  
  61. for parm in {"Parameters"}
  62.     if {grabMakeFile}
  63.         set makefile "{parm}"
  64.         set grabMakeFile 0
  65.     else if {grabOption}
  66.         set TempCompilerOverride "{parm}"
  67.         set grabOption 0
  68.     else if {grabCompiler}
  69.         set buildtype {parm}
  70.         set buildtype "`echo "{buildtype}" | streamedit -e '/,/ Replace /,/ " " -c ∞'`"
  71.         set grabCompiler 0
  72.     else if "{parm}" =~ /-b/
  73.         set grabCompiler 1
  74.     else if "{parm}" =~ /-fat/
  75.         set fatFlag {parm}
  76.     else if "{parm}" =~ /-nopch/
  77.         set nopch {parm}
  78.     else if "{parm}" =~ /-nodbg/
  79.         set nonDebugFlags "-d SymOption=off -d MacsbugOption=off -d WarningOption='-w 17 -d _RETAIL=1'"
  80.     else if "{parm}" =~ /-toco/
  81.         set grabOption 1
  82.     else if "{parm}" =~ /-cvi/
  83.         set infoFlag {parm}
  84.     else if "{parm}" =~ /-everything/
  85.         set fullBuild '-e'
  86.         set killObjects ""
  87.     else if "{parm}" =~ /-k/
  88.         if "{fullBuild}" ==  ""
  89.             set killObjects {parm}
  90.         end
  91.     else if "{parm}" =~ /-f/
  92.         set grabMakeFile 1
  93.     else
  94.         Echo ""
  95.         Echo "Error: Invalid parameter [{parm}]"
  96.         Echo ""
  97.         turnCaseSensitiveOn
  98.         Exit 1
  99.     end
  100. end
  101.  
  102. if "{makefile}" == ""
  103.     Echo ""
  104.     Echo "Error: No make file was specified!!"
  105.     Echo ""
  106.     turnCaseSensitiveOn
  107.     Exit 1
  108. end
  109.  
  110. set dirpath "`files -q -f "{makefile}"`"
  111. ( evaluate "{dirpath}" =~ /(?+:)®1?+/ ) ∑∑ dev:null
  112. set projectDir "{®1}"
  113. unset ®1
  114.  
  115. if "{nopch}" == ""
  116.     set PrecompiledHeaders "-f ∂"{OpenDocBuildSupportDir}SCPCHeaders.make∂""
  117. else
  118.     set PrecompiledHeaders "-d CppPrecompiledHeaders=∂"∂" -d CPrecompiledHeaders=∂"∂""
  119. end
  120.  
  121. # --- Tool Info --- #
  122.  
  123. alias ToolInfo 'set vstr "`VersionList -v -h -raw {toolName}`"; ∂
  124.         (evaluate "{vstr}" =~ /(?+)®1    (?+)®2    ?+/) ∑∑ dev:null; ∂
  125.         Echo "    {®1}, version {®2}"'
  126.  
  127. # --- Run each compiler requested --- #
  128.  
  129. for compiler in {buildType}
  130.  
  131.     if ( {debug} == 1 ) # DEBUG
  132.         echo ">>compiler: {compiler}"
  133.     end
  134.     
  135.     set buildTarget ""
  136.     set where ""
  137.     set linker ""
  138.  
  139.     # --- Execute Make to Generate Build Commands --- #
  140.     
  141.     Echo
  142.     Echo ===========================================================
  143.     Echo Build Started (`date`)
  144.     Echo –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
  145.     
  146.     if "{compiler}" =~ /idl/
  147.         set compiler "somipc"
  148.         set BuildTarget BUILDIDL
  149.         if "{killObjects}" != ""
  150.             set fullBuild '-e'
  151.             set killObjects ""
  152.         end
  153.             
  154.     else if "{compiler}" =~ /pubidl/
  155.         set compiler "somipc"
  156.         set BuildTarget BUILDPUBIDL
  157.         set PrivateHeaders "-d PrivateHeadersFlag=∂"∂""
  158.         if "{killObjects}" != ""
  159.             set fullBuild '-e'
  160.             set killObjects ""
  161.         end
  162.             
  163.     else if "{compiler}" =~ /rez/
  164.         set BuildTarget BUILDREZ
  165.         if "{killObjects}" != ""
  166.             set fullBuild '-e'
  167.             set killObjects ""
  168.         end
  169.     
  170.     else if "{compiler}" =~ /[s]*mrc[p]*/
  171.         set BuildTarget BUILDPPCLINK
  172.         set Where "{compiler}:"
  173.         set linker "ppclink"
  174.         
  175.     else if "{compiler}" =~ /mcc/
  176.         set BuildTarget BUILDPPCLINK
  177.         set Where "{compiler}:"
  178.         set linker "ppclink"
  179.         set PrecompiledHeaders "-d CppPrecompiledHeaders=∂"∂" -d CPrecompiledHeaders=∂"∂""        
  180.  
  181.     else if "{compiler}" =~ /sc[p]*/
  182.         set BuildTarget BUILDILINK
  183.         set Where "{compiler}:"
  184.         set linker "ilink"
  185.  
  186.     else
  187.         # no compiler was specified, so exit quietly.
  188.         break
  189.     end
  190.     
  191.     # --- Create Object Folders and Kill Objects --- #
  192.     
  193.     if ( {debug} == 0 )
  194.         set exit 0
  195.         (newfolder "{projectDir}Objects:") ∑∑ dev:null
  196.         (newfolder "{projectDir}Objects:{Where}") ∑∑ dev:null
  197.         if "{fullBuild}" == "" && "{killObjects}" != ""
  198.             (delete -i -n "{projectDir}Objects:{Where}"≈.o) ∑∑ dev:null
  199.             (delete -i -n "{projectDir}Objects:{Where}"≈.seg) ∑∑ dev:null
  200.             (delete -i -n "{projectDir}Objects:{Where}"≈.seg.NJ) ∑∑ dev:null
  201.             (delete -i -n "{projectDir}Objects:{Where}"≈.xcoff) ∑∑ dev:null
  202.             (delete -i -n "{projectDir}Objects:{Where}"≈.dump) ∑∑ dev:null
  203.         end
  204.         set exit 1
  205.     end    
  206.  
  207.     # --- Generate build commands --- #
  208.     
  209.     Make {BuildTarget} ∂
  210.     {fullBuild} ∂
  211.     -d SampleCodeProjectDir="{projectDir}"             ∂
  212.     -d BuildSupportDir="{OpenDocBuildSupportDir}"    ∂
  213.     -d ObjectsDir="{projectDir}Objects:{Where}"     ∂
  214.     -f "{OpenDocBuildSupportDir}Variables.make"     ∂
  215.     {PrecompiledHeaders}                             ∂
  216.     -f "{OpenDocBuildSupportDir}OpenDocUtils.make"     ∂
  217.     -f "{OpenDocBuildSupportDir}{compiler}Vars.make"∂
  218.     -f "{OpenDocBuildSupportDir}DefaultRules.make"    ∂
  219.     {TempCompilerOverride}                            ∂
  220.     {nonDebugFlags}                                    ∂
  221.     {PrivateHeaders}                                ∂
  222.     -f "{makefile}" > "{projectDir}Objects:make.out"
  223.  
  224.     # --- Execute Generated Build Commands --- #
  225.     
  226.     if ( `count -l "{projectDir}Objects:make.out"` > 0 )
  227.         set toolName {compiler}
  228.         Echo "Tools:`ToolInfo`"
  229.         if ( "{linker}" != "" )
  230.             set toolName {linker}
  231.             Echo "        `ToolInfo`"
  232.         end
  233.         Echo –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
  234.     
  235.         if ( {debug} == 0 )
  236.             "{projectDir}Objects:make.out"
  237.         else #DEBUG
  238.             rename "{projectDir}Objects:make.out" "{projectDir}Objects:make.out.{compiler}"
  239.             Echo '#Debug On#'
  240.             Echo Open "'{projectDir}Objects:make.out.{compiler}'"
  241.         end
  242.         
  243.         turnCaseSensitiveOn
  244.         
  245.         Echo –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
  246.     end
  247.  
  248.     Echo Build Completed (`date`)
  249.     Echo -----------------------------------------------------------
  250.  
  251. end
  252.  
  253. # --- If specified, merge output into FAT library --- #
  254.  
  255. if "{fatFlag}" =~ /-fat/
  256.     Echo
  257.     Echo ===========================================================
  258.     Echo Build Started (`date`)
  259.     Echo –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
  260.     Echo 'if {buildAnyway} == 1' > "{projectDir}Objects:make.out"
  261.     Make BUILDFATLIB ∂
  262.     -d SampleCodeProjectDir="{projectDir}"            ∂
  263.     -d BuildSupportDir="{OpenDocBuildSupportDir}"    ∂
  264.     -d ObjectsDir="{projectDir}Objects:"            ∂
  265.     -d MakeFat="{OpenDocBuildSupportDir}MakeFat"    ∂
  266.     -d CppPrecompiledHeaders=""                        ∂
  267.     -d CPrecompiledHeaders=""                        ∂
  268.     -f "{OpenDocBuildSupportDir}Variables.make"        ∂
  269.     -f "{makefile}" ∂
  270.     -f "{OpenDocBuildSupportDir}MakeFATRules.make"    ∂
  271.      >> "{projectDir}Objects:make.out"
  272.     
  273.     "{projectDir}Objects:make.out"
  274.     Echo –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
  275.     Echo Build Completed (`date`)
  276.     Echo -----------------------------------------------------------
  277. end
  278.  
  279. # --- If specified, retrieve relevant CFM version information --- #
  280.  
  281. if "{infoFlag}" =~ /-cvi/
  282.     set exit 0
  283.     set stuff "`files -f -t rsrc "{projectDir}Objects:" ≥≥ dev:null`"
  284.     for targFile in {stuff}
  285.     end
  286.     if ( "{targFile}" == "" )
  287.         set stuff "`files -f -t shlb "{projectDir}" ≥≥ dev:null`"
  288.         for targFile in {stuff}
  289.         end
  290.         if ( "{targFile}" == "" )
  291.             Echo "# Error: Perform a build before executing this command."
  292.             Exit 1
  293.         end
  294.     end
  295.     set cvn "`dumppef -do r "{targFile}" ≥≥ dev:null | ∂
  296.     streamedit -e '/        (?+)®1,?+currentVersion?+∂(([0-9]+)®2∂)/ Set x ®2" ["®1"]"; ∞ Print x; /?+/ Delete'`"
  297.     set odv "`dumppef -do r "{targFile}" ≥≥ dev:null | ∂
  298.     streamedit -e '/        (?+)®1,?+oldDefVersion?+∂(([0-9]+)®2∂)/ Set x ®2" ["®1"]"; ∞ Print x; /?+/ Delete'`"
  299.     set exit 1
  300.     Echo
  301.     Echo ">> CFM current version = {cvn}"
  302.     Echo ">> CFM old definition version = {odv}"
  303.     Echo
  304. end
  305.